هاست

توضیح تابع Physics.Raycast و ثابت Mathf.Infinity در unity3d

بین مطالب وب سایت جستجو کنید

بهترین پایگاه دانلود سورس و آموزش بازی های کامپیوتری


عضو شوید


نام کاربری
رمز عبور

فراموشی رمز عبور؟

عضویت سریع

نام کاربری
رمز عبور
تکرار رمز
ایمیل
کد تصویری
sajjad
8:49
پنج شنبه 12 شهريور 1394

شکل کلی:

public static bool Raycast(Vector3 origin, Vector3 direction, float maxDistance = Mathf.Infinity, int layerMask = DefaultRaycastLayers);

من با مثال یاد می دم:

کد زیر می گه روبرو رو ببین. اگه تا فاصله ده متری جلوی ما چیزی بود پیام بده:

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
    void Update() {
        Vector3 fwd = transform.TransformDirection(Vector3.forward);
        if (Physics.Raycast(transform.position, fwd, 10))
            print("There is something in front of the object!");
        
    }
}

 

 

توضیح میدم: transform.position موقعیت خودمون هست.(موقعیت گیم ابجکتی که اسکریپت رو می اندازیم روش)

fwd از نوع بردار سه بعدی (کلاس Vector3)تعریف شد خودش شناخته میشه(منظورم اینه که توابع up و left و right و غیره رو از کلاس بردار سه بعدی به ارث می بره)

تابع ری کست می یاد اشعه پرتاب می کنه به سمت کجا؟ فوروارد یعنی جلو (اینو خودش میشناسه به ما ربطی نداره درد سر هم نداره راحتیم ما)

آخرین پارامتر هم حداکثر فاصله هست که دادیم 10 یعنی تا شعاع ده متری از جلومون هر چی وجود داشت از دیوار گرفته تا آدم یا هر جونوری بود تشخیص میده. ما اینجا گفتیم اگه چیزی جلومون بود پیام بده که بفهمیم تابع داره درست عمل می کنه. شما می تونید بگید مثلا سرعت صفر بشه که توی دیوار نره یا مثلا بعدش کدی بنویسید گه بیاد تگ tag شی روبرو رو بخونه و یا حمله کنه یا هر چیز دیگه ای که کدنویسی اضافه باید کنید اونجا.

نکته : به جای عدد 10 می تونیم Mathf.Infinity بذاریم.

Mathf.Infinity یه ثابت تعریف شده هست.خود Infinity به معنی بی نهایت و عضوی از کلاس ریاضی Mathf هست.

یونیتی اینو ساخته واسه اینکه بعضی اوقات نیاز داریم تا اون دور دورا رو رصد کنیم یعنی تا حتی 5 یا 6 کیلومتر اونورتر توی بازی رو رصد کنیم که اگه در شعاع دید ما و در روبروی ما چیزی بود detect کنه (تشخیص بده)

حالا چرا روبرو؟ چون گفتیم Vector3.forward

آیا میشه جهت های دیگه مثل بالا یا چپ و راست و پایین و .... رو بررسی کرد. آره اونم میشه. وقتی بنویسید Vector3 و نقطه بزنید خودش دستورات رو لیست می کنه مثل تابع up یا left یا right و الی آخر.

اگه اصلا بخوایم توی زاویه خاص پلیر چک کنیم باید چیکار کنیم؟

چطوری؟

اینطوری(واسه زاویه 63 درجه ):

    1. float angleToCheck =63f;
    2. if(Physics.Raycast(transform.position, angleToCheck,out hit,10f)
    3. {
    4. ...
    5. }

یا اینطوری:

دایرکشن یعنی جهت که بهش زاویه می دیم(زاویه همون angle هست)

مثل این:

  1. direction =newVector3(Mathf.Cos(angle),Mathf.Sin(angle),0f);

منبع  رو بگم: بیخیال بابا کد رو یاد بگیر

امیدوارم لذت ببرید از یادداشت های من. ارادتمند شما sajjad3011

 

 

تعداد بازدید از این مطلب: 707
بازدید : 707

صفحه قبل 1 2 3 4 5 ... 10 صفحه بعد


نام :
وب :
پیام :
2+2=:
(Refresh)
براي اطلاع از آپيدت شدن وبلاگ در خبرنامه وبلاگ عضو شويد تا جديدترين مطالب به ايميل شما ارسال شود



به وبلاگ من خوش آمدید
تمام حقوق اين وب سايت متعلق به مای گیم آور مي باشد | طراحی قالب : تم ديزاينر